#ifndef svl_TPostMessage_H
#define svl_TPostMessage_H

#include "svl.h"

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

namespace svl
{
////////////////////////////////////////////////////////////////////////////////

class TPostMessage : public TDebug
{
public:
  static WPARAM WParam;
  //
           TPostMessage() { isPost = false;}
  virtual ~TPostMessage() {}
  //
  void Post();
  void Send() { TPostMessage_Receive();}
  //
  virtual void TPostMessage_Receive()=0;

private:
  static void WaitAllReceive();

  struct TWin : public svl::TWindow
  {
    void Post(TPostMessage *Message);
    virtual LRESULT TWindow_WndProc(TWindow::TMessage &Message);
  };
  struct TManager
  {
    TWin *Win;
    TManager() { Win = NULL;}
   ~TManager() { WaitAllReceive(); delete Win;}
  };
  
  static TManager manager;
  static int cntObjects;
  bool   isPost;
  svl_Except;
};

////////////////////////////////////////////////////////////////////////////////
}

#endif
